昨天教大家建立完mail模板後,今天要換來介紹如何用function來動態代入額外需要的資料進mail中,以及在寄送mail時可以設置的其他參數
先上範例:
def idx_send_mail(self):
repair_ids = self.env['idx.repair'].search([('state', '=', 'draft')])
for rec in repair_ids:
# 指定寄件人
email_from = '系統通知 <admin@example.com>'
# 指定mail模板
template = request.env.ref('odoo14_idx_repair.remind_service_email_template')
# 組單據網址
web_base_url = self.env['ir.config_parameter'].sudo().get_param('web.base.url')
menu_id = self.env.ref('odoo14_idx_repair.idx_repair', raise_if_not_found=False)
action_id = self.env.ref('odoo14_idx_repair.action_idx_repair', raise_if_not_found=False)
url = """{}/web#id={}&action={}&view_type=form&model=idx.repair&menu_id={}""".format(
web_base_url,
rec.id,
action_id.id,
menu_id.id)
context = dict(self.env.context or {})
context.update({
'url': url
})
email_values = {
'email_from': email_from,
}
template.sudo().with_context(context).send_mail(rec.id, force_send=True, email_values=email_values)
以範例為例,先撈出所有單據,再一一處理每筆單據,之後指定此封mail要使用的模板。
我們可能在寄送mail時,希望將單據的網址一同放在信件內容裡,方便收件者快速查看該張單據,就像範例中可以在function中先將網址組起來,再透過context
傳遞給模板,這樣就可做到動態代入資料的部分。send_mail(單據id, force_send=True, email_values)
為原生提供的寄送mail的function,force_send
在下面詳細介紹,email_values
為可選的參數,用來設置mail模板原有的資料外的信件相關資訊。
在寄送mail時,可以選擇立即寄送或是在指定的時間才進行寄送。
template.sudo().send_mail(cont.id, force_send=True)
email_values
加上指定寄送的時間,到了指定的時間便會自動寄送。email_values = {'scheduled_date': self.scheduled_date.strftime("%Y-%m-%d %H:%M")}
template_id.send_mail(payslip_id.id, force_send=False, email_values=email_values)
以上就是mail相關的各項介紹,希望大家看完這幾天的文章之後能夠更瞭解odoo中的mail功能,除了文章內有提到的部分,原生的模組中還有更多對於mail相關的應用可以供大家參考。